Webhook'lar
Bu belge TrustChex sistemindeki webhook işlevselliğini açıklamaktadır.
Genel Bakış
Webhook'lar, TrustChex hesabınızda gerçekleşen olaylar hakkında uygulamanızın gerçek zamanlı bildirimleri almasını sağlar. Bir olay meydana geldiğinde, yapılandırılmış webhook URL'sine bir HTTP POST isteği gönderiyoruz.
Temel Özellikler:
- Gerçek zamanlı olay bildirimleri
- Üstel geri çekilme ile otomatik yeniden deneme mekanizması
- Güvenlik için HMAC SHA256 imza doğrulama
- Kapsamlı olay günlüğü ve izleme
- Kolay hata ayıklama için test işlevselliği
Olay Türleri
Doğrulama Oturumu Olayları
verification_session.created
- Yeni bir doğrulama oturumu oluşturulduverification_session.completed
- Doğrulama oturumu tamamlandıverification_session.cancelled
- Doğrulama oturumu iptal edildi
Kimlik Doğrulama Olayları
identification.created
- Yeni bir kimlik doğrulama oluşturulduidentification.submitted
- Kimlik doğrulama inceleme için gönderildiidentification.failed
- Kimlik doğrulama işlemi başarısız olduidentification.in_automatic_review
- Kimlik doğrulama otomatik inceleme altındaidentification.in_manual_review
- Kimlik doğrulama manuel inceleme gerektiriyoridentification.waiting_for_status_change_approval
- Durum değişikliği onay bekliyoridentification.approved
- Kimlik doğrulama onaylandıidentification.rejected
- Kimlik doğrulama reddedildiidentification.resubmission_required
- Kimlik doğrulama yeniden gönderim gerektiriyor
Webhook Yönetimi
Webhook Oluşturma
- Panonuzda Ayarlar > Webhook'lar bölümüne gidin
- "Yeni Webhook" butonuna tıklayın
- Webhook'unuzu yapılandırın:
- URL: Webhook olaylarını almak istediğiniz uç nokta
- Açıklama: Webhook'unuz için isteğe bağlı açıklama
- Olaylar: Abone olmak istediğiniz olay türlerini seçin
- Aktif: Webhook'u etkinleştirin/devre dışı bırakın
- Webhook'unuzu oluşturmak için "Kaydet" butonuna tıklayın
Webhook'ları Test Etme
Uç noktanızı doğrulamak için webhook panosundaki test butonunu kullanın:
- Webhook'unuzun yanındaki Test butonuna tıklayın
- Uç noktanıza bir test olayı gönderilecek
- Teslimat durumunu görmek için olay günlüklerini kontrol edin
- Hata ayıklama için istek/yanıt ayrıntılarını inceleyin
Webhook Yükü
Tüm webhook'lar aşağıdaki standart alanları içerir:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"accountId": "hesap-id-niz",
"webhookId": "webhook-id",
"eventType": "identification.approved",
"timestamp": "2024-01-01T12:00:00.000Z",
"data": {
"accountId": "hesap-id-niz",
"identificationId": "kimlik-dogrulama-id",
"status": "APPROVED",
"email": "[email protected]",
"phoneNumber": "+1234567890",
"score": 95,
"createdAt": "2024-01-01T11:00:00.000Z",
"updatedAt": "2024-01-01T12:00:00.000Z"
}
}
Olaya Özel Yük Örnekleri
Doğrulama Oturumu Veri Yapısı
{
"data": {
"accountId": "hesap-id-niz",
"sessionId": "oturum-id",
"status": "COMPLETED",
"identificationId": "kimlik-dogrulama-id",
"email": "[email protected]",
"phoneNumber": "+1234567890",
"locale": "tr",
"sendOTP": true,
"createdAt": "2024-01-01T11:00:00.000Z",
"updatedAt": "2024-01-01T12:00:00.000Z",
"expiresAt": "2024-01-01T13:00:00.000Z"
}
}
Kimlik Doğrulama Veri Yapısı
{
"data": {
"accountId": "hesap-id-niz",
"identificationId": "kimlik-dogrulama-id",
"status": "APPROVED",
"email": "[email protected]",
"phoneNumber": "+1234567890",
"score": 95,
"createdAt": "2024-01-01T11:00:00.000Z",
"updatedAt": "2024-01-01T12:00:00.000Z"
}
}
Başlıklar
Her webhook isteği şu başlıkları içerir:
Content-Type: application/json
User-Agent: TrustChex-Webhook/1.0
X-Webhook-Event: {eventType}
X-Webhook-Delivery: {deliveryId}
X-Webhook-Timestamp: {timestamp}
X-Webhook-Secret: {secret}
(yapılandırılmışsa)X-Webhook-Signature-256: sha256={signature}
(gizli anahtar yapılandırılmışsa)
Güvenlik
Gizli Anahtar Doğrulama
Webhook'unuz için bir gizli anahtar yapılandırırsanız, bunu X-Webhook-Secret
başlığına dahil ederiz ve X-Webhook-Signature-256
başlığında bir HMAC SHA256 imzası oluştururuz.
İmzayı doğrulamak için:
const crypto = require('crypto');
function verifySignature(payload, signature, secret) {
const expectedSignature = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expectedSignature)
);
}
Teslimat ve Yeniden Denemeler
- Webhook'ların 30 saniyelik zaman aşımı vardır
- Başarısız teslimatlar üstel geri çekilme ile en fazla 3 kez yeniden denenir (1s, 3s, 9s)
- HTTP durum kodları 2xx başarılı olarak kabul edilir
- Tüm webhook denemeleri günlüğe kaydedilir ve panoda görüntülenebilir
Test Etme
Uç noktanıza bir test olayı göndermek için webhook panosundaki test işlevselliğini kullanın:
{
"id": "test-teslimat-id",
"accountId": "hesap-id-niz",
"webhookId": "webhook-id-niz",
"eventType": "test.webhook",
"timestamp": "2024-01-01T12:00:00.000Z",
"data": {
"message": "Bu bir test webhook teslimatıdır",
"test": true
}
}
Test Uç Noktası
Test amaçları için, genel webhook uç noktamızı kullanabilirsiniz:
https://domain-adresiniz.com/api/public/webhooks
Sorgu parametreleri:
?fail=true
- Başarısızlığı simüle eder (500 döndürür)?status=404
- Belirli durum kodu döndürür?delay=5000
- Milisaniye cinsinden gecikme ekler (maksimum 60000)
En İyi Uygulamalar
- İdempotentlik: Yinelenen olayları işlemekten kaçınmak için webhook teslimat ID'sini kullanın
- Zaman Aşımı Yönetimi: Zaman aşımlarını önlemek için 30 saniye içinde yanıt verin
- Hata Yönetimi: Uygun HTTP durum kodları döndürün (başarı için 2xx)
- Güvenlik: Gizli anahtarlar kullanırken her zaman webhook imzalarını doğrulayın
- Günlük Kayıtları: Hata ayıklama ve izleme için webhook olaylarını günlüğe kaydedin
- Zarif Bozulma: Uygulamanızda webhook hatalarını zarif bir şekilde yönetin
Örnek Uygulamalar
Node.js Express
const express = require('express');
const crypto = require('crypto');
const app = express();
app.use(express.json());
app.post('/webhook', (req, res) => {
const signature = req.headers['x-webhook-signature-256'];
const secret = process.env.WEBHOOK_SECRET;
if (secret && signature) {
const payload = JSON.stringify(req.body);
const expectedSignature = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expectedSignature))) {
return res.status(401).send('Yetkisiz');
}
}
console.log('Webhook alındı:', req.body);
// Webhook olayını işle
switch (req.body.eventType) {
case 'identification.approved':
// Onay işlemini yönet
break;
case 'identification.rejected':
// Red işlemini yönet
break;
default:
console.log('Bilinmeyen olay türü:', req.body.eventType);
}
res.json({ received: true });
});
Python Flask
import hmac
import hashlib
import json
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
signature = request.headers.get('X-Webhook-Signature-256')
secret = os.environ.get('WEBHOOK_SECRET')
if secret and signature:
payload = request.get_data()
expected_signature = 'sha256=' + hmac.new(
secret.encode('utf-8'),
payload,
hashlib.sha256
).hexdigest()
if not hmac.compare_digest(signature, expected_signature):
return jsonify({'error': 'Yetkisiz'}), 401
data = request.get_json()
print(f"Webhook alındı: {data}")
# Webhook olayını işle
event_type = data.get('eventType')
if event_type == 'identification.approved':
# Onay işlemini yönet
pass
elif event_type == 'identification.rejected':
# Red işlemini yönet
pass
return jsonify({'received': True})